package cn.xzqwjw.taskmanager.service;

import cn.xzqwjw.taskmanager.domain.pojo.SysAdmin;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.security.core.userdetails.UserDetailsService;

/**
 * @author rush
 */
public interface SysAdminService extends IService<SysAdmin>, UserDetailsService {

  /**
   * 增加管理员，同时增加该管理员所属角色
   *
   * @param sysAdmin 要添加的管理员
   * @return 返回给 controller 用于输出 response 的 json 格式的字符串
   */
  String add(SysAdmin sysAdmin);

  /**
   * 根据id删除管理员，此管理员所属角色根据数据库设计自动删除关系
   *
   * @param id 管理员id
   * @return 返回给 controller 用于输出 response 的 json 格式的字符串
   */
  String delById(Integer id);

  /**
   * 修改管理员
   *
   * @param sysAdmin 要修改的管理员对象
   * @return 返回给 controller 用于输出 response 的 json 格式的字符串
   */
  String modifyAll(SysAdmin sysAdmin);

  /**
   * 修改管理员各种状态
   *
   * @param id     要修改的管理员id
   * @param action action 的值为：Enabled AccountExpired AccountLocked CredentialsExpired等
   * @return 返回给 controller 用于输出 response 的 json 格式的字符串
   */
  String patchStatus(Integer id, String action);

  /**
   * 修改密码
   *
   * @param idAdmin    要修改的管理员 idAdmin
   * @param paramsJson json格式参数 {"PasswordOld":"","PasswordNew":""}
   * @return 返回给 controller 用于输出 response 的 json 格式的字符串
   */
  String patchPassword(Integer idAdmin, String paramsJson);

  /**
   * 登录成功后更新最后一次登录时间字段/密码，登录时security的filter调用
   *
   * @param id 要修改的管理员id
   */
  void patchLastLoginTime(Integer id);

  /**
   * 根据id得到一条记录
   *
   * @param id 要查询的id
   * @return 返回给 controller 用于输出 response 的 json 格式的字符串
   */
  String queryById(Integer id);

  /**
   * 根据用户名查询得到管理员
   *
   * @param username json格式的查询参数
   * @return 返回给 controller 用于输出 response 的 json 格式的字符串
   */
  String queryByUsername(String username);

  /**
   * 查全部列表，不返回超级管理员
   *
   * @param type 如果值为 admin ，表示用于管理员管理页中显示所有管理员，
   *             如果值为 task ，表示用于任务添加页中显示某任务所属管理员
   * @return 返回给 controller 用于输出 response 的 json 格式的字符串
   */
  String listAll(String type);

}
